采用递归的形式做Java树状形式解析

采用递归的形式做Java树状形式解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
private List<GpsStrategyVO> recursionGetGpsStrategy(List<GpsStrategy> gpsStrategies,int parentId){
List<GpsStrategyVO> next = new ArrayList<>();
//1.获取所有子集合
gpsStrategies.stream().forEach(gpsStrategyVO ->{
if(parentId == gpsStrategyVO.getParentId()){
GpsStrategyVO strategyVO = new GpsStrategyVO();
BeanUtils.copyProperties(gpsStrategyVO,strategyVO);
next.add(strategyVO);
}
});

//2.遍历子集合,给当前每一条数据插入子集合(递归)
if (!ObjectIsNullUtil.isNullOrEmpty(next)){
next.stream().forEach(gpsStrategyVO -> {
List<GpsStrategyVO> gpsStrategyVOS = recursionGetGpsStrategy(gpsStrategies, gpsStrategyVO.getStrategyId());
if (!ObjectIsNullUtil.isNullOrEmpty(gpsStrategyVOS)){
gpsStrategyVO.setNext(gpsStrategyVOS);
}
//2.1 获取策略详情列表
if (null == gpsStrategyDetailVOList){
getGpsStrategyDetailVOs();
}
//2.2 获取当前策略id对应的策略详情
gpsStrategyVO.setGpsStrategyDetails(gpsStrategyDetailService.selectStrategyDetailsByStrategyIdLogic(gpsStrategyDetailVOList,gpsStrategyVO.getStrategyId()));
});
}
return next;
}

private static List<GpsStrategyDetailVO> gpsStrategyDetailVOList = null;

/**
* 初始化策略详情
* @return
*/
public List<GpsStrategyDetailVO> getGpsStrategyDetailVOs(){
if(gpsStrategyDetailVOList == null){
gpsStrategyDetailVOList = gpsStrategyDetailService.selectAll();
}
return gpsStrategyDetailVOList;
}

场景

  • 该场景是做一个树状结构的返回。其中,最高级别的parentId设置为0.则调用方法只需传入整个列表和0即可:
    1
    2
    3
    4
    //1.查询全部
    List<GpsStrategy> gpsStrategies = gpsStrategyService.selectAll();
    //2.递归
    List<GpsStrategyVO> strategies = recursionGetGpsStrategy(gpsStrategies, 0);

递归解释

  • 先获取当前条件下所有子查询